//
//  UIColor+Ext.swift
//  Tuhu
//
//  Created by 丁帅 on 2017/3/14.
//  Copyright © 2017年 Tuhu. All rights reserved.
//

import UIKit

//MARK: 蓝虎项目中常见色值使用 UIColor.色系.预设值
public extension UIColor {
    //MARK: 灰色 -> 黑色  透明度默认值为1
    /// hex：0xF5F5F5  RGB：（245、245、245） 常用于背景、空白页
    static let gray1: UIColor = UIColor(hex: 0xF5F5F5)
    /// hex：0xF6F6F7  RGB：（246、246、247） 常用于背景、空白页
    static let gray2: UIColor = UIColor(hex: 0xF6F6F7)
    /// hex：0xF2F3F5  RGB：（242、243、245） 常用于背景、空白页
    static let gray3: UIColor = UIColor(hex: 0xF2F3F5)
    /// hex：0xEDEEF0  RGB：（237、238、240） 常用于页面间隔线、表间隔View
    static let gray4: UIColor = UIColor(hex: 0xEDEEF0)
    /// hex：0xD8D8D8  RGB：（216、216、216） 常用于公告点视图
    static let gray5: UIColor = UIColor(hex: 0xD8D8D8)
    /// hex：0xA3AAB4  RGB：（163、170、180） 常用于占位文字、淡灰色说明
    static let gray6: UIColor = UIColor(hex: 0xA3AAB4)
    /// hex：0x999999  RGB：（153、153、153） 常用于提醒、不可选文案
    static let gray7: UIColor = UIColor(hex: 0x999999)
    /// hex：0x6E7681  RGB：（110、118、129） 常用于公告点视图
    static let gray8: UIColor = UIColor(hex: 0x6E7681)
    /// hex：0x666666  RGB：（102、102、102） 常用于说明、备注、取消按钮文案
    static let gray9: UIColor = UIColor(hex: 0x666666)
    /// hex：0x333333  RGB：（51、51、51） 常用于标题、着重字
    static let gray10: UIColor = UIColor(hex: 0x333333)
    /// hex：0x27313E  RGB：（39、49、62） 常用于普通文案
    static let gray11: UIColor = UIColor(hex: 0x27313E)
    
    
    //MARK: 红色  透明度默认值为1
    /// hex：0xF95355  RGB：（249、83、85） 标红数字、警示文案、特殊状态
    static let redTitle: UIColor = UIColor(hex: 0xF95355)
    /// hex：0xE71910  RGB：（231、25、16） 状态文案
    static let redStatus: UIColor = UIColor(hex: 0xE71910)
    
    
    //MARK: 蓝色  透明度默认值为1
    /// hex：0x1B88EE  RGB：（27、136、238） 蓝虎APP中常规使用的蓝色
    static let blueTitle: UIColor = UIColor(hex: 0x1B88EE)
    
    
    //MARK: 橙色系  透明度默认值为1
    /// hex：0xF57C33  RGB：（245、124、51） 状态文案
    static let orangeStatus: UIColor = UIColor(hex: 0xF57C33)
    /// hex：0xFFF3E4  RGB：（255、243、228） 背景图
    static let orangeBackground: UIColor = UIColor(hex: 0xFFF3E4)
    /// hex：0xF8AC59  RGB：（248、172、89） 标签等
    static let orangeTag: UIColor = UIColor(hex: 0xF8AC59)
    
    
    //MARK: 绿色系  透明度默认值为1
    /// hex：0x16BC84  RGB：（22、188、132） 状态文案
    static let greenStatus: UIColor = UIColor(hex: 0x16BC84)
    /// hex：0x4FC7AF  RGB：（79、199、175） 标签、点图
    static let greenTag: UIColor = UIColor(hex: 0x4FC7AF)
}

//MARK: 透明度设置UIColor.Type.alpha(a: alpha)
public extension UIColor {
    /// 颜色透明度设置  格式：UIColor.Type.alpha(a: alpha)
    /// - Parameter a: 透明度  取值：0.0~1.0
    func alpha(alpha: CGFloat) -> UIColor {
        return self.withAlphaComponent(alpha)
    }
}

// MARK: UIColor
public extension UIColor {
    /**
     通过色值创建UIColor对象， alpha 值默认为 1

     - parameter hex: 色值数字，通常用十六进制数字表示  例如  0xFFFFFF

     - returns: 对应色值的UIColor对象
     */
    @objc convenience init(hex: UInt32) {
        self.init(hex: hex, alpha: 1)
    }

    /**
     通过色值创建UIColor对象

     - parameter hex: 色值数字，通常用十六进制数字表示  例如  0xFFFFFF
     - parameter alpha:     颜色透明度

     - returns: 对应色值的UIColor对象
     */
    @objc convenience init(hex: UInt32, alpha: CGFloat) { // build time: 0.31s
        let red = CGFloat(Double((hex & 0xFF0000) >> 16) / 255.0)
        let green = CGFloat(Double((hex & 0x00FF00) >> 8) / 255.0)
        let blue = CGFloat(Double((hex & 0x0000FF)) / 255.0)
        self.init(red: red, green: green, blue: blue, alpha: alpha)
    }

    /**
     通过色值创建UIColor对象， alpha 值默认为 1

     - parameter hexString: 色值字符串，十六进制数字字符串表示  支持#前缀

     - returns: 对应色值的UIColor对象
     */
    @objc convenience init(hexString: String) {
        self.init(hexString: hexString, alpha: 1)
    }

    /**
     通过色值创建UIColor对象， alpha 值默认为 1

     - parameter hexString: 色值字符串，十六进制数字字符串表示  支持#前缀
     - parameter alpha:     颜色透明度

     - returns: 对应色值的UIColor对象
     */
    @objc convenience init(hexString: String, alpha: CGFloat) {
        var temp = hexString.uppercased()
        if temp.hasPrefix("#") {
            temp = temp.replacingOccurrences(of: "#", with: "")
        }

        switch temp.count {
        case 6:
            self.init(hex: UInt32(hexString.hexInteger), alpha: alpha)
        case 3:
            self.init(hex3: hexString.hexInteger, alpha: alpha)
        default:
            self.init(hex: 0x000000)
        }
    }

    @objc private convenience init(hex3 hex: Int, alpha: CGFloat) {
        func duplicate4bits(_ i: Int) -> Int {
            return (i << 4) + i
        }
        self.init(red: CGFloat(duplicate4bits((hex & 0xF00) >> 8))/255,
                  green: CGFloat(duplicate4bits((hex & 0x0F0) >> 4))/255,
                  blue: CGFloat(duplicate4bits(hex & 0x00F))/255,
                  alpha: alpha)
    }

    /**
     通过RGB值创建UIColor对象，参数为Int型，取值范围0-255，alpha 值默认为 1

     - parameter r: 红色 0-255
     - parameter g: 绿色 0-255
     - parameter b: 蓝色 0-255

     - returns: 对应RGB值的UIColor对象
     */
    convenience init(_ r: Int, _ g: Int, _ b: Int) {
        self.init(r, g, b, 1.0)
    }

    /**
     通过RGB值创建UIColor对象，参数为Int型，取值范围0-255，alpha 值默认为 1

     - parameter r: 红色 0-255
     - parameter g: 绿色 0-255
     - parameter b: 蓝色 0-255
     - parameter a: 颜色透明度

     - returns: 对应RGB值的UIColor对象
     */
    convenience init(_ r: Int, _ g: Int, _ b: Int, _ a: CGFloat) {
        self.init(red: CGFloat(r)/255, green: CGFloat(g)/255, blue: CGFloat(b)/255, alpha: a)
    }
}

//MARK: 获取UIColor：R、G、B、alpha值
public extension UIColor {
    var redValue: CGFloat {
        var r: CGFloat = 0
        getRed(&r, green: nil, blue: nil, alpha: nil)
        return r
    }
    var greenValue: CGFloat {
        var g: CGFloat = 0
        getRed(nil, green: &g, blue: nil, alpha: nil)
        return g
    }
    var blueValue: CGFloat {
        var b: CGFloat = 0
        getRed(nil, green: nil, blue: &b, alpha: nil)
        return b
    }
    var alphaValue: CGFloat {
        return cgColor.alpha
    }
}
